#ifndef __SOC_GPIO_H__
#define __SOC_GPIO_H__

#include "cms8s6990.h"
#include "../soc_comm.h"


void SOC_GpioInit(SOC_GpioPort_t port, int pin, SOC_GpioMode_t mode);
void SOC_GpioWrite(SOC_GpioPort_t port, int pin, int val);
void SOC_GpioTrigger(SOC_GpioPort_t port, int pin);
int SOC_GpioRead(SOC_GpioPort_t port, int pin);

void SOC_GpioSetItMode(SOC_GpioPort_t port, int pin, SOC_GpioItMode_t mode);
void SOC_GpioSet_IT(SOC_GpioPort_t port, int pin, bool en);

//C51中断调用回调有BUG,或者只是CMS BUG???
//不实现
// void SOC_GpioSet_IT_CallBack(SOC_GpioPort_t port, int pin, SOC_GPIO_IT_CALLBACK cb);

//
void SOC_GpioInitExt(uint16_t portPin, SOC_GpioMode_t mode);
void SOC_GpioWriteExt(uint16_t portPin, int val);
void SOC_GpioTriggerExt(uint16_t portPin);
int SOC_GpioReadExt(uint16_t portPin);

void SOC_GpioSetItModeExt(uint16_t portPin, SOC_GpioItMode_t mode);
void SOC_GpioSet_ITExt(uint16_t portPin, bool en);

//平台相关
#define SOC_Gpio_IT_Raise(gpio) do{\
    int i;\
    for(i = 0; i < 8; i++)\
    {\
        if(GPIO_GetIntFlag(gpio, i))\
        {\
            SOC_Gpio_##gpio##_IT_CallBack(i);\
            GPIO_ClearIntFlag(gpio, i);\
        }\
    }\
}\
while(0)

#endif 